#include <iostream>
using namespace std;

//发生重载时
//普通函数与函数模版的调用规则
//1、如果函数模版和普通函数都可以调用，优先调用普通函数
//2、可以通过空模版参数列表 强制调用 函数模版
//3、函数模版可以发生函数重载
//4、如果函数模版可以产生更好的匹配，则调用函数模版

void myPrint(int a, int b)
{
    cout << "调用的是 普通函数" << endl;
}

template<class T>
void myPrint(T a, T b)
{
    cout << "调用的是 函数模版" << endl;
}

template<class T>
void myPrint(T a, T b,T c)
{
    cout << "调用的是 重载的函数模版" << endl;
}

void test1()
{
    int a = 10;
    int b = 30;
    myPrint(a, b);//优先调用普通函数

    //可以通过空模版参数列表 强制调用 函数模版
    myPrint<>(a, b);

    myPrint(a, b, 100);//函数模版可重载

    //如果函数模版可以产生更好的匹配，则调用函数模版
    char c1 = 'a';
    char c2 = 'b';
    myPrint(c1, c2);
}

int main()
{
    test1();
    return 0;
}